const { SyncHook } = require('tapable')
// 参数是一个数组，参数长度有用，代表取真实的call的参数个数，数组里字符串的名字没用
const hook = new SyncHook(['name', 'age'])

hook.tap({ name: 'tap1' }, (name, age) => {
  console.log(1, name, age)
})
hook.tap({ name: 'tap3' }, (name, age) => {
  console.log(3, name, age)
})
hook.tap({ name: 'tap5' }, (name, age) => {
  console.log(5, name, age)
})
hook.tap({ name: 'tap2', stage: 0 }, (name) => {
  console.log(2, name)
})
hook.call('zh', 28)


//  stage使用的上一个如果没有比该stage大，则插入到上一个后面, stage适合每个tap的options都添加，在hook中_insert函数中比较后插入
// before 适合在单个上使用，可用before:'tap1'或before:['tap1','tap2']，这个注册的事件能在before配置里存在的事件名前执行.
